package com.copa.l1802;

/**
 * @author copa
 * @createDate 2023-01-04 09:13
 * @function 数学过程模拟
 */
public class Test1 {

    public int maxValue(int n, int index, int maxSum) {
        // 先整体拔高1
        int value = maxSum - n;
        // 表示结果，这里就算为1个
        int count = 1;
        // 左指针 从index开始往左
        int left = index;
        // 右指针 从index开始往右
        int right = index;
        while (left > 0 || right < n - 1) {
            // 当前左右指针遍历长度 即[left,right]区间长度
            int length = (right - left) + 1;
            if (value >= length) {
                // 符合条件就[left,right]区间拔高1，因此剩余value该减去对应的length，且左右指针各自移动1
                count++;
                left = Math.max(0, left - 1);
                right = Math.min(right + 1, n - 1);
                value -= length;
                continue;
            }
            // 若不符合条件，则跳出循环
            break;
        }
        // 剩余value需要再拔高算一算，可能left或right到不了最小（最大）index
        count += value / n;
        return count;
    }

    public static void main(String[] args) {
        int n = 4, index = 2, maxSum = 6;
        System.out.println(new Test1().maxValue(n, index, maxSum));
    }
}
